package reflect;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Scanner;

/**
 * java的反射机制
 */
public class ReflectDemo1 {
    public static void main(String[] args) throws ClassNotFoundException {
        /*
        //1.通过.class获取类对象
        Class cls1 = String.class;
        Class cls2 = ArrayList.class;
        Class cls3 = int.class;

        //2.通过制定类的完全限定名获取一个类的类对象
        Class cls4 = Class.forName("java.lang.String");
        Class cls5 = Class.forName("java.util.ArrayList");
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个类名：");
        String name = sc.nextLine();
        Class cls6 = Class.forName(name);
        */

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个类名：");
        String name = sc.nextLine();
        Class cls = Class.forName(name);  //基于类名构造Class类对象

        System.out.println("获取类的完全限定名："+cls.getName());
        System.out.println("获取类名："+cls.getSimpleName());

        //Package是反射对象之一，它的每个实例用于表示一个包
        Package pack = cls.getPackage();
        System.out.println("获取包名："+pack.getName());

        //Method是反射对象之一，它的每个实例用于表示一个类的方法
        Method [] methods = cls.getMethods();  //获取所有方法
        System.out.println("一共有："+methods.length+"个方法");
        for(Method method : methods){
            System.out.println(method.getName());  //获取方法名
        }

    }
}
